package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.itheima.common.domain.AjaxResult;
import com.itheima.common.utils.StringUtils;
import com.itheima.order.entity.OmsCartItem;
import com.itheima.service.OmsCartItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//前台购物车

@Slf4j
@RestController
@RequestMapping("/cart")
public class OmsCartItemController {
    @Autowired
    private OmsCartItemService omsCartItemService;

    /**
     * 添加购物车
     *
     * @param omsCartItem
     * @return
     */
    @PostMapping("/add")
    private AjaxResult add(@RequestBody OmsCartItem omsCartItem) {
        LambdaQueryWrapper<OmsCartItem> lqw = new LambdaQueryWrapper<>();
        lqw.in(omsCartItem.getProductId() != null, OmsCartItem::getProductId, omsCartItem.getProductId());
        List<OmsCartItem> omsCartItemList = omsCartItemService.list(lqw);
        if (omsCartItemList.size() == 0) {
            omsCartItemService.save(omsCartItem);
            return AjaxResult.success("添加商品成功");
        } else {
            for (OmsCartItem cartItem : omsCartItemList) {
                if (cartItem.getProductAttr().equals(omsCartItem.getProductAttr())) {
                    LambdaUpdateWrapper<OmsCartItem> luw = new LambdaUpdateWrapper<>();
                    luw.eq(cartItem.getProductId() != null, OmsCartItem::getProductId, cartItem.getProductId())
                            .set(OmsCartItem::getQuantity, cartItem.getQuantity() + 1);
                    omsCartItemService.update(luw);
                    return AjaxResult.success("添加数量成功");
                } else {
                    omsCartItemService.save(omsCartItem);
                    return AjaxResult.success("添加商品成功");
                }
            }
        }
        return AjaxResult.error("失败");
    }

    /**
     * 清空购物车
     *
     * @return
     */
    @PostMapping("/clear")
    private AjaxResult clear() {
        //通过方法获取到用户id
        Long id = 9L;
        //通过用户id删除所有关于他的内容
        LambdaQueryWrapper<OmsCartItem> lqw = new LambdaQueryWrapper<>();
        lqw.eq(OmsCartItem::getMemberId, id);
        omsCartItemService.remove(lqw);
        return AjaxResult.success();
    }

    /**
     * 删除购物车中相应的商品
     *
     * @param ids
     * @return
     */
    @PostMapping("/delete")
    private AjaxResult delete(String ids) {
        List<Long> longs = StringUtils.toList(ids);
        omsCartItemService.removeByIds(longs);
        return AjaxResult.success();
    }

    private AjaxResult getProduct(@PathVariable Long id) {
        return null;
    }

    /**
     * 获取当前用户的购物车内容
     *
     * @return
     */
    @GetMapping("/list")
    private AjaxResult list() {
        //通过方法获取到用户id
        Long id = 9L;
        //用id查所有信息
        LambdaQueryWrapper<OmsCartItem> lqw = new LambdaQueryWrapper<>();
        lqw.eq(OmsCartItem::getMemberId, id);
        List<OmsCartItem> list = omsCartItemService.list();
        return AjaxResult.success(list);
    }

    @PostMapping("/update/attr")
    private AjaxResult updateAttr(@RequestBody OmsCartItem omsCartItem) {
        omsCartItemService.updateById(omsCartItem);
        return AjaxResult.success();
    }

    /**
     * 购物车内部商品数量调整
     *
     * @param id
     * @param quantity
     * @return
     */
    @GetMapping("/update/quantity")
    private AjaxResult updateQuantity(@RequestParam("id") String id, @RequestParam("quantity") String quantity) {
        LambdaUpdateWrapper<OmsCartItem> luw = new LambdaUpdateWrapper<>();
        luw.eq(OmsCartItem::getId, id)
                .set(quantity != null, OmsCartItem::getQuantity, quantity);
        omsCartItemService.update(luw);
        return AjaxResult.success();
    }


}
